/*全局权限控制文件
* 解决：
* VueRouter的路由守卫实现：在进入某个页面前，执行beforeEach进行权限校验
* ⭐：需要把这个文件引入到main.ts中，否则不执行
* */

import router from '@/router'
import { useLoginUserStore } from '@/stores/user.ts'
import { storeToRefs } from 'pinia'
import { message } from 'ant-design-vue'
// import { useRouter } from 'vue-router'

//Uncaught TypeError: Cannot read properties of undefined (reading 'beforeEach')
//问题：为什么这里不是使用userRouter，而是导入/router/index.ts
// const router = useRouter()

//问题：下面这一行可以放到router.beforeEach的外面吗？为什么
//不可以。原因：浏览器报错'Are you trying to use a store before calling "app.use(pinia)"?'
//原因：在main.ts中在app.use(pinia)前导入了access.ts文档，则按照顺序执行，就会先执行这一句代码，但此时还没有createPinia，所以报错
// const loginUserStore = useLoginUserStore()

router.beforeEach(async (to, from, next) => {
  // 因为进入每个页面前都需要进行权限校验
  //所以，配置了全局校验规则
  //但由于获取当前登录用户的全局变量之前是防止在app.vue中的(即只在打开项目的时候执行一次)
  //所以导致：当路由切换时，(进入某个页面前)无法再次获取当前登录用户信息进行判断 ？？？
  //当路由切换时，(进入某个页面前)根据当前登录用户信息进行特定展示

  const loginUserStore = useLoginUserStore()
  const {loginUser} = storeToRefs(loginUserStore)
  // if(loginUser.userAccount==='未登录')
    //所有页面都需要先登录才能浏览了
    //优化：首页和某些页面不需要登录就可以浏览
    //解决：这个判断放在里面
  // await loginUserStore.fetchLogin()
  if(to.fullPath.startsWith('/admin')) {

    if(!loginUser || loginUser.value.userRole !== 'admin') {
      message.warn('没有权限,请登录管理员账号!')
      next(`/user/login?redirect=${to.fullPath}`)
      return
    }
  }
  next() //因为这个函数是在进入某一个路由前执行的，所以需要取消断点继续下一步操作
})
